Software, in its compiled form, is intended to be executed on a computing device, such as a personal computer. Software is comprised of machine language or byte code (i.e., code that a computer can read and execute). Generally, machine language and byte code are comprised of binary instructions i.e., ones and zeros.
Generally speaking, it is impractical/impossible for a person to view, read, or manipulate machine language or byte code. On the other hand, high level (i.e., text-based) programming languages (e.g., C, C++ & FORTRAN) were created to simplify programming by making it faster and easier. These high level languages are composed of human-readable language elements, thus allowing for simplified understanding by computer programmers. For example, while a conditional “if” statement may be represented by many ones and zeros in compiled code, it may be represented by the word “IF” in high level language code. Accordingly, a computer programmer may easily be able to read, modify, and understand the source code of a high level language.
A situation may arise in which one may wish to compare the computer program included within a first piece of compiled machine code to the computer program included within a high-level language code. For example, one may desire to see how closely the computer program included within the compiled code resembles the computer program included within the source code. Alternatively, one may want to determine whether a particular compiled code module was generated from a particular source code listing. Because compiled code and source code take very different forms, a direct comparison may not be possible. First and as mentioned above, the compiled code may be very difficult to read and understand. Second, the source code may contain superfluous elements such as comments and extra parentheses that will make the code easier to read, but will not affect the underlying semantics and/or the algorithm of the code. Compiled code will be devoid of these superfluous elements. Accordingly, such elements may interfere with a direct comparison.